package com.cpd.blog.common.utils;

import com.cpd.blog.common.constant.StatusCode;
import io.jsonwebtoken.Jwt;
import io.jsonwebtoken.JwtBuilder;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import org.apache.commons.lang3.StringUtils;

import java.util.Date;
import java.util.HashMap;
import java.util.Map;

/**
 * token工具类
 *
 * @author Copydown
 */
public class JWTUtils {

    //TODO: 最好写配置文件里
    private static final String jwtToken = "giveCpdOffer679!*%^&*"; //密钥

    public static String createToken(Long userId) {
        //B 部分，kv配对
        Map<String, Object> claims = new HashMap<>();
        claims.put("userId", userId);

        JwtBuilder jwtBuilder = Jwts.builder()
                .signWith(SignatureAlgorithm.HS256, jwtToken) //A 部分 签发算法，秘钥为jwtToken
                .setClaims(claims) // body数据，要唯一，设置 B部分
                .setIssuedAt(new Date()) // 设置签发时间
                .setExpiration(new Date(System.currentTimeMillis() + 24 * 60 * 60 * 60 * 1000));// 一天的有效时间
        return jwtBuilder.compact();
    }

    public static Map<String, Object> checkToken(String token) {
        try {
            Jwt parse = Jwts.parser().setSigningKey(jwtToken).parse(token);
            return (Map<String, Object>) parse.getBody();
        } catch (Exception e) {
            LogUtil.log(StatusCode.TOKEN_ERROR);
        }
        return null;
    }

    public static boolean checkTokenNotBlank(String token) {
        return StringUtils.isNoneBlank(token) && checkToken(token) != null;
    }
}
